package xgodbkv

import (
	"sync"

	"gorm.io/gorm"
)

// 数据库相关配置
type Config struct {
	DB      *gorm.DB
	KVTable string          // 配置表名称
	Lock    sync.Mutex      // 缓存锁
	Cache   map[uint]string // 缓存配置项
}

// 默认配置表所在的配置
var _default Config = Config{
	KVTable: "key_value",
	Lock:    sync.Mutex{},
	Cache:   map[uint]string{},
}

// 注入配置项
func Regedit(c *Config) {
	if c != nil {
		if _default.DB == nil && c.DB != nil {
			_default.DB = c.DB
		}
		if c.KVTable != "" {
			_default.KVTable = c.KVTable
		}
		// 生成默认配置表
		_default.DB.AutoMigrate(&KeyValue{})
	}
}

type KeyValue struct {
	Id        uint   `gorm:"column:id;primaryKey;type:BIGINT UNSIGNED;not null;autoIncrement" json:"id" form:"id"`
	Fid       uint   `gorm:"column:fid;type:BIGINT UNSIGNED;not null;index;default:0;comment:上级分类编号（数据分析时使用）" json:"fid" form:"fid"` //上级分类编号（数据分析时使用）
	Value     string `gorm:"column:value;type:varchar(200);unique;comment:对应的值" json:"value" form:"value"`                           //对应的值
	CreatedAt string `gorm:"column:created_at;type:datetime;comment:创建时间" json:"created_at" form:"created_at"`
}

// 获取表名
func (c *KeyValue) TableName() string {
	return _default.KVTable
}
